/*
*	模拟
*/



//替换所有的问号
//https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/submissions/
// class Solution {
// public:
//     char getWord(char oldword1 = 0,char oldword2 = 0)
//     {
//         int pos = 'a';
//         while(pos == oldword1 || pos == oldword2) ++pos;
//         return pos;
//     }
//     string modifyString(string s) {
//         int n = s.size();
//         for(int i = 0;i<n;++i)
//         {
//             if(s[i] == '?')
//             {
//                 if(i == 0 && i+1<n) s[i] = getWord(s[i+1]);
//                 else if(i == n-1 && i-1>=0) s[i] = getWord(s[i-1]);
//                 else if(i+1<n && i-1>=0) s[i] = getWord(s[i-1],s[i+1]);
//                 else s[i] = getWord();
//             }
//         }
//         return s;
//     }
// };

//提莫攻击
//https://leetcode.cn/problems/teemo-attacking/submissions/
// class Solution {
// public:
//     int findPoisonedDuration(vector<int>& timeSeries, int duration) {
//         int ret = 0;
//         int n = timeSeries.size();
//         for(int i = 1;i<n;++i)
//         {
//             //现在时间减去是一段攻击时间 得到间隔时间 如果间隔时间大于中毒时间 则期间全部中毒 如果小于中毒时间 则中毒秒数为两时间间隔秒数
//             int sec = timeSeries[i]-timeSeries[i-1];
//             if(sec>=duration) ret += duration;
//             else ret += sec;
//         }
//         return ret+duration;
//     }
// };


//N字形变换
//https://leetcode.cn/problems/zigzag-conversion/submissions/
// class Solution {
// public:
//     string convert(string s, int numRows) {
//         if(numRows == 1) return s;
//         int n = s.size();

//         //第一行和最后一行(numRows) 元素在s中下标相差 d=2*n-n 
//         //中间行(1~numRows-2) k,d-k,k+d,2d-k
//         string ret;
//         ret.reserve(n);
//         int d = (2*numRows)-2;
//         for(int i = 0;i<n;i+=d) ret.push_back(s[i]);

//         for(int i = 1;i<numRows-1;++i) //枚举 1~numRows-1行
//         {
//             for(int k=i,j=d-k ;k<n || j<n;k+=d,j+=d)
//             {
//                 if(k < n) ret.push_back(s[k]);
//                 if(j < n) ret.push_back(s[j]);
//             }
//         }

        
//         for(int i = numRows-1;i<n;i+=d) ret.push_back(s[i]);

//         return ret;
//     }
// };


//外观数列
//https://leetcode.cn/problems/count-and-say/description/
// class Solution {
// public:
//     string countAndSay(int n) {
//         string ret = "1";
//         string tmp;
//         ret.reserve(n+1);
//         tmp.reserve(n+1);
//         for(int i = 1;i<n;++i)
//         {
//             int left = 0,right = 0;
//             int retn = ret.size();
//             while(right < retn)
//             {
//                 while(right < retn && ret[left] == ret[right]) ++right;
//                 tmp += to_string(right-left) + ret[left];
//                 left = right;
//             }
//             ret = tmp;
//             tmp.clear();
//         }
//         return ret;
//     }
// };


//数青蛙
//https://leetcode.cn/problems/minimum-number-of-frogs-croaking/submissions/
// class Solution {
// public:
//     int minNumberOfFrogs(string croakOfFrogs) {
//         string tar = "croak";
//         unordered_map<char, int> hash;
//         for(auto& c:tar) hash[c];
//         for(auto& c:croakOfFrogs)
//         {
//             switch(c)
//             {
//                 case 'c':
//                 {
//                     if(hash['k']>0) --hash['k'];
//                     ++hash[c];
//                     break;
//                 }
//                 case 'r':
//                 {
//                     if(hash['c'] > 0) --hash['c'],++hash['r'];
//                     else return -1;
//                     break;
//                 }
//                 case 'o':
//                 {
//                     if(hash['r'] > 0) --hash['r'],++hash['o'];
//                     else return -1;
//                     break;
//                 }
//                 case 'a':
//                 {
//                     if(hash['o'] > 0) --hash['o'],++hash['a'];
//                     else return -1;
//                     break;
//                 }
//                 case 'k':
//                 {
//                     if(hash['a'] > 0) --hash['a'],++hash['k'];
//                     else return -1;
//                     break;
//                 }
//             }
//         }
//         for(auto& pa:hash) if(pa.first != 'k' && pa.second>0) return -1;
//         return hash['k'];
//     }
// };


